/*
 * Copyright (c) 2020 - present, Inspur Genersoft Co., Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.inspur.edp.web.frontendproject.zerocode.operation;

import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.inspur.edp.lcm.metadata.api.IMetadataContent;
import com.inspur.edp.web.common.environment.ExecuteEnvironment;
import com.inspur.edp.web.formmetadata.metadata.formdom.FormDOM;
import com.inspur.edp.web.formmetadata.metadatamanager.EapiMetadataManager;
import com.inspur.edp.web.jitruntimebuild.api.entity.JitMetadataTypeEnum;
import com.inspur.edp.web.frontendproject.zerocode.ZeroCodeFormParameter;
import com.inspur.edp.web.frontendproject.zerocode.ZeroCodeFormRefMetadataParameter;

import java.util.HashMap;
import java.util.List;

class EapiMetadataOperation {
    public void save(FormDOM json, String formMetadataName, String webDevPath, ZeroCodeFormParameter formParameter) {
        if (json == null || json.getModule() == null || json.getModule().getCode() == null
                || json.getModule().getSchemas() == null || json.getModule().getSchemas().size() == 0) {
            return;
        }
        StringBuilder eapis = new StringBuilder();
        eapis.append("[");
        int index = 0;
        // VO-EAPI(vo和eapi是一对一的关系)
        List<HashMap<String, Object>> schemas = json.getModule().getSchemas();
        EapiMetadataManager eapiMetadataManager = new EapiMetadataManager(ExecuteEnvironment.Design, false);
        for (HashMap<String, Object> item : schemas) {
            if (index > 0) {
                eapis.append(",");
            }
            //获取对应的EapiID  如果可以读取到
            String strEapiID = item.containsKey("eapiId") ? item.get("eapiId").toString() : "";
            // 如果获取到EapiID  那么根据EapiID去读取对应的元数据
            IMetadataContent eapiMetadataContent = null;

            ZeroCodeFormRefMetadataParameter formRefMetadataParameter = formParameter.getSpecialFormRefMetaData(strEapiID, JitMetadataTypeEnum.Eapi);
            if (formRefMetadataParameter != null) {
                eapiMetadataContent = formRefMetadataParameter.getMetadata().getContent();
                String eapiJson = "";
                eapiJson = eapiMetadataManager.serialize(eapiMetadataContent, PropertyNamingStrategy.UPPER_CAMEL_CASE);
                eapis.append(eapiJson);
                index += 1;
            }

        }
        eapis.append("]");
        eapiMetadataManager.saveMetadataFile(webDevPath,
                formMetadataName.toLowerCase() + ".eapi.json", eapis.toString());
    }
}
